require File.dirname(__FILE__) + "/../common/ItemType"
require File.dirname(__FILE__) + "/../exception/IllegalArgumentException"
require File.dirname(__FILE__) + "/BudgetSearchAction"
require File.dirname(__FILE__) + "/CompoundSearchAction"
require File.dirname(__FILE__) + "/OutgoingSearchAction"

# 渡されたクエリを処理するためのActionオブジェクトを生成するファクトリクラス
class SearchActionFactory
  # 唯一のインスタンス
  @@singleton = SearchActionFactory.new()
  
  # 唯一のインスタンスを返す
  def SearchActionFactory.getInstance()
    return @@singleton
  end
  
  # 渡されたクエリに従い、クエリを処理するロジック（Actionオブジェクト）を生成する
  # @param {AbstractSearchQuery} query
  # @return {AbstractSearchAction}
  def createAction(query)
    if(query == nil)
      raise IllegalArgumentException, "query is null"
    end
    case query.getType()
      when ItemType::COMPOUND
      return CompoundSearchAction.new(query)
      when ItemType::BUDGET
      return BudgetSearchAction.new(query)
      when ItemType::OUTGOING
      return OutgoingSearchAction.new(query)
    else
      raise IllegalArgumentException, "unknown query [" + query + "]"
    end
  end
end
